/**
 * 文件名：@ContextArgumentResolver.java <br/>
 * 包名：cn.efunbox.afw.web.mvc.springmvc <br/>
 * 项目名：afw-mvc-web <br/>
 * @author xtwin <br/>
 */
package cn.efunbox.afw.web.mvc.springmvc;

import org.springframework.core.MethodParameter;
import org.springframework.web.bind.support.WebDataBinderFactory;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.method.support.ModelAndViewContainer;

import cn.efunbox.afw.core.AfwContext;
import cn.efunbox.afw.core.mvc.context.Context;

/**
 * 类名：ContextArgumentResolver  <br />
 *
 * 功能：Context参数解析器
 *
 * @author xtwin <br />
 * 创建时间：2015年12月2日 下午6:15:46  <br />
 * @version 2015年12月2日
 */
public class ContextArgumentResolver implements HandlerMethodArgumentResolver {

	/**
	 * 功能: <br/>
	 * 
	 * 重写：xtwin <br/>
	 * 
	 * @version ：2015年12月2日 下午6:16:13<br/>
	 * 
	 * @param parameter
	 * @return <br/>
	 * @see org.springframework.web.method.support.HandlerMethodArgumentResolver#supportsParameter(org.springframework.core.MethodParameter)
	 */
	@Override
	public boolean supportsParameter(MethodParameter parameter) {
		/*Class<?> ptype = parameter.getParameterType();
		
		return null != ptype && ptype.isAssignableFrom(Context.class);*/
		return parameter.getParameterType().isAssignableFrom(Context.class);
	}

	/**
	 * 功能: <br/>
	 * 
	 * 重写：xtwin <br/>
	 * 
	 * @version ：2015年12月2日 下午6:16:13<br/>
	 * 
	 * @param parameter
	 * @param mavContainer
	 * @param webRequest
	 * @param binderFactory
	 * @return
	 * @throws Exception <br/>
	 * @see org.springframework.web.method.support.HandlerMethodArgumentResolver#resolveArgument(org.springframework.core.MethodParameter, org.springframework.web.method.support.ModelAndViewContainer, org.springframework.web.context.request.NativeWebRequest, org.springframework.web.bind.support.WebDataBinderFactory)
	 */
	@Override
	public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
		// 取出当前线程上下文中的context对象
		return AfwContext.getContext();
	}
}